/**
 * 提取音视频元数据
 * @param {MediaElement} element - 媒体元素
 * @returns {Object} 媒体元数据对象
 */
function extractMetadata(element) {
  return {
    type: element.tagName.toLowerCase(),
    src: element.src || element.currentSrc,
    pageUrl: window.location.href,
    duration: element.duration || 0, // 视频时长(秒)
    title: extractVideoTitle(element), // 使用新的标题提取方法
    poster: element.poster, // 视频封面
    controls: element.controls, // 是否显示控制栏
    autoplay: element.autoplay, // 是否自动播放
    loop: element.loop, // 是否循环播放
    muted: element.muted, // 是否静音
    playsinline: element.playsinline, // 是否内联播放
  }
}

/**
 * 解析视频标题
 * @param {MediaElement} element - 媒体元素
 * @returns {string} 视频标题
 */
function extractVideoTitle(element) {
  // 首先尝试从元素本身获取标题
  if (element.title) {
    return element.title
  }

  // 尝试从alt属性获取
  if (element.alt) {
    return element.alt
  }

  // 尝试从aria-label属性获取
  if (element.getAttribute('aria-label')) {
    return element.getAttribute('aria-label')
  }

  // 根据当前网站URL进行特定解析
  const hostname = window.location.hostname

  // 哔哩哔哩 (bilibili.com)
  if (hostname.includes('bilibili.com')) {
    return _extractBilibiliTitle()
  }

  // 腾讯视频 (v.qq.com)
  if (hostname.includes('v.qq.com')) {
    return _extractTencentVideoTitle()
  }

  // 爱奇艺 (iqiyi.com)
  if (hostname.includes('iqiyi.com')) {
    return _extractIqiyiTitle()
  }

  // 优酷 (youku.com)
  if (hostname.includes('youku.com')) {
    return _extractYoukuTitle()
  }

  // YouTube (youtube.com)
  if (hostname.includes('youtube.com') || hostname.includes('youtu.be')) {
    return _extractYouTubeTitle()
  }

  // 通用解析方法
  return _extractGenericVideoTitle(element)
}

/**
 * 解析哔哩哔哩视频标题
 * @returns {string} 视频标题
 */
function _extractBilibiliTitle() {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && !pageTitle.includes('哔哩哔哩')) {
    return pageTitle.replace(' _哔哩哔哩_bilibili', '').replace(' - 哔哩哔哩', '')
  }
  // 方法2: 从meta标签获取
  const metaTitle = document.querySelector('meta[property="og:title"]')
  if (metaTitle && metaTitle.content) {
    return metaTitle.content
  }

  return '哔哩哔哩视频'
}

/**
 * 解析腾讯视频标题
 * @returns {string} 视频标题
 */
function _extractTencentVideoTitle() {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && !pageTitle.includes('腾讯视频')) {
    return pageTitle.replace(' - 腾讯视频', '').replace(' - 腾讯网', '')
  }

  // 方法2: 从meta标签获取
  const metaTitle = document.querySelector('meta[property="og:title"]')
  if (metaTitle && metaTitle.content) {
    return metaTitle.content
  }

  return '腾讯视频'
}

/**
 * 解析爱奇艺视频标题
 * @returns {string} 视频标题
 */
function _extractIqiyiTitle() {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && !pageTitle.includes('爱奇艺')) {
    return pageTitle.replace(' - 爱奇艺', '').replace(' - iQiyi', '')
  }
  // 方法2: 从meta标签获取
  const metaTitle = document.querySelector('meta[property="og:title"]')
  if (metaTitle && metaTitle.content) {
    return metaTitle.content
  }

  return '爱奇艺视频'
}

/**
 * 解析优酷视频标题
 * @returns {string} 视频标题
 */
function _extractYoukuTitle() {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && !pageTitle.includes('优酷')) {
    return pageTitle.replace(' - 优酷', '').replace(' - Youku', '')
  }

  // 方法2: 从meta标签获取
  const metaTitle = document.querySelector('meta[property="og:title"]')
  if (metaTitle && metaTitle.content) {
    return metaTitle.content
  }

  return '优酷视频'
}

/**
 * 解析YouTube视频标题
 * @returns {string} 视频标题
 */
function _extractYouTubeTitle() {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && !pageTitle.includes('YouTube')) {
    return pageTitle.replace(' - YouTube', '')
  }

  // 方法2: 从meta标签获取
  const metaTitle = document.querySelector('meta[property="og:title"]')
  if (metaTitle && metaTitle.content) {
    return metaTitle.content
  }

  return 'YouTube视频'
}

/**
 * 通用视频标题解析方法
 * @param {MediaElement} element - 媒体元素
 * @returns {string} 视频标题
 */
function _extractGenericVideoTitle(element) {
  // 方法1: 从页面标题获取
  const pageTitle = document.title
  if (pageTitle && pageTitle.length > 0) {
    // 移除常见的网站后缀
    const cleanTitle = pageTitle.replace(/\s*[-|]\s*(视频|Video|播放器|Player).*$/, '').replace(/\s*[-|]\s*[^-|]*$/, '')
    if (cleanTitle && cleanTitle.length > 0) {
      return cleanTitle
    }
  }

  // 方法2: 从meta标签获取
  const metaSelectors = ['meta[property="og:title"]', 'meta[name="title"]', 'meta[property="twitter:title"]']

  for (const selector of metaSelectors) {
    const element = document.querySelector(selector)
    if (element && element.content && element.content.trim()) {
      return element.content.trim()
    }
  }

  // 方法4: 从视频元素的父容器或相关元素获取
  let parent = element.parentElement
  for (let i = 0; i < 5 && parent; i++) {
    // 向上查找5层
    const titleElement = parent.querySelector('.title, .video-title, [title]')
    if (titleElement) {
      const title = titleElement.textContent || titleElement.getAttribute('title')
      if (title && title.trim()) {
        return title.trim()
      }
    }
    parent = parent.parentElement
  }

  // 方法5: 从URL参数获取（适用于某些网站）
  const urlParams = new URLSearchParams(window.location.search)
  const titleParam = urlParams.get('title') || urlParams.get('name')
  if (titleParam) {
    return decodeURIComponent(titleParam)
  }

  // 默认标题
  const hostname = window.location.hostname
  if (hostname.includes('video') || hostname.includes('media')) {
    return '在线视频'
  } else {
    return '网页视频'
  }
}

const utils = {
  extractMetadata,
  extractVideoTitle,
}

export default utils
